package lanqiao;
/**
 * 砝码称重【第十二届】【省赛】【B组】
 * 输入：
 *    3
 *    1 4 6
 * 输出：
 *    10
 * 说明：
 *    1 = 1;
 *    2 = 6-4;
 *    3 = 4-1;
 *    4 = 4;
 *    5 = 6-1;
 *    6 = 6;
 *    7 = 1+6;
 *    9 = 6+4-1;
 *    10 = 4+6;
 *    11 = 1+4+6;
 *
 * 步骤一：确定状态
 * 以dp[i][j]表示有i个砝码时，能否称量出质量j，true表示可行，false表示不可行。
 *
 * 步骤二：确定状态转移方程
 * 欲求dp[i][j]，已知在有i − 1个砝码的条件下的所有称量情况，接下来就是求处理第i个砝码时的所可以得到的称量情况。
 * 1.若不放该砝码，则dp[i][j]=dp[i-1][j];
 * 2.若放，则又有两种情况，于左或于右：
 * 前提当然是dp[i−1][j]要存在。
 *
 * 步骤三：确定计算顺序
 * 自上往下，自左往右。
 */
//动态规划
import java.util.Scanner;
public class Prev_263 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] s = new int[n];
        for(int i = 0; i < s.length; i++){
            s[i] = input.nextInt();
        }
        System.out.println(countNums(s));
    }
    //计算s中的砝码可以测多少种质量
    private static int countNums(int[] s) {
        //先累加求总和
        int sum = 0;
        for(int i : s){
            sum += i;
        }
        //dp[i][j]表示前i个元素能否凑出j
        boolean[][] dp = new boolean[s.length + 1][sum + 1];
        //初始化
        for(int i = 0; i <= s.length; i++){
            dp[i][0] = true;
        }
        //先遍历元素
        for(int i = 1; i <= s.length; i++){
            //首先它一定可以测出自己的质量
            dp[i][s[i-1]] = true;
            //再遍历背包容量
            for(int j = 1; j <= sum; j++){
                //根据前面元素可以凑出的数，来确定自己可以凑的数
                if(dp[i - 1][j]){
                    //若前面的元素就可以凑出j,那结果一定是true
                    dp[i][j] = true;
                    //还可以测出前面的结果+自己的质量
                    dp[i][j + s[i-1]] = true;
                    //还可以测出前面结果和自己质量的差
                    dp[i][Math.abs(j - s[i-1])] = true;
                }
            }
        }
        //查找结果
        int count = 0;
        for(int j = 1; j <= sum; j++){
            if(dp[s.length][j]){
                count ++;
            }
        }
        return count;
    }
}
